package com.framework.core.mybatis.util;

import org.springframework.util.ObjectUtils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;

public class FieldUtils {
    public static String fromCamelCase(String name) {
        if (ObjectUtils.isEmpty(name)) {
            return null;
        }

        StringBuilder underscoreString = new StringBuilder(name.length() + 5);
        underscoreString.append(Character.toLowerCase(name.charAt(0)));

        for (int i = 1; i < name.length(); i++) {
            char c = name.charAt(i);
            if (Character.isUpperCase(c)) {
                underscoreString.append('_').append(Character.toLowerCase(c));
            } else {
                underscoreString.append(c);
            }
        }

        return underscoreString.toString();
    }

    /**
     * 获取类及其所有父类的非静态字段。
     *
     * @param clazz 要检查的类。
     * @return 包含类及其所有父类非静态字段的列表。
     */
    public static List<Field> getAllFields(Class<?> clazz) {
        List<Field> fields = new ArrayList<>();
        while (clazz != null) {
            Field[] declaredFields = clazz.getDeclaredFields();
            for (Field field : declaredFields) {
                // 排除静态字段
                if (!java.lang.reflect.Modifier.isStatic(field.getModifiers())) {
                    fields.add(field);
                }
            }
            clazz = clazz.getSuperclass();
        }
        return fields;
    }
}
